﻿/*-------------------------------------------------------------------------
* 命名空间: PrismDialogSimple.ViewModels/MainViewModel
* 类       名: MainViewModel
* 功      能:  TD
* 时      间:  2023/12/22 14:14:43
* 版      本:  V1.0
* 作      者:  Fioman
* 格      言:  Talk is cheap,show me the code ^_^
*-------------------------------------------------------------------------*/
using DryIoc;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using PrismDialogSimple.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace PrismDialogSimple.ViewModels
{
    public class MainViewModel : BindableBase
    {
        private readonly IDialogService dialogService;

        public MainViewModel(IDialogService dialogService)
        {
            ShowDialogTraditionCommand = new DelegateCommand(DoShowDialogTradition);
            ShowDialogPrismCommand = new DelegateCommand(DoShowDialogPrism);
            this.dialogService = dialogService;
        }

        private void DoShowDialogPrism()
        {
            dialogService.ShowDialog("PrismDialog", new DialogParameters(), result =>
            {
                if (result.Result == ButtonResult.OK)
                {
                    MessageBox.Show("点击了OK按钮", "温馨提示");
                }
                else if (result.Result == ButtonResult.Cancel)
                {
                    MessageBox.Show("点击了取消按钮", "温馨提示");
                }
            });
        }

        /// <summary>
        /// 传统的方式显示一个Dialog的方式有以下两个特点:
        /// 1) 必须知道dialog是如何创建的,要显示的去new Dialog的实现
        /// 2) ShowDialog方法会返回一个bool?类型的值,表示对话框是如何被关闭的.true表示对话框的DialogResult属性被设置为true.
        ///     false表示DialogResult的属性被设置false,null表示对话框被关闭按时DialogResult属性没有被设置.
        /// 3) 经过我的查阅,目前来说ShowDialog()的返回值没有是null的情况,如果是右上角的关闭按钮或者是调用Close()方法,没有设置
        /// DialogResult属性的时候,它返回依旧是false,只有在设置DialogResult=true的时候才会返回true.
        /// </summary>
        private void DoShowDialogTradition()
        {
            var dialogToShow = new TraditionDialog();
            bool? result = dialogToShow.ShowDialog();
            if (result != null && result is bool res)
            {
                if (res)
                {
                    MessageBox.Show("窗口返回true");
                }
                else
                {
                    MessageBox.Show("窗口返回false");
                }
            }
            else
            {
                MessageBox.Show("DialogResult的属性没有被设置!", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }

        public DelegateCommand ShowDialogTraditionCommand { get; private set; }
        public DelegateCommand ShowDialogPrismCommand { get; private set; }
    }
}
